package com.newtouch.bxzs.enterprise.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.newtouch.bxzs.common.base.model.PushCustomerRecord;
import com.newtouch.bxzs.common.base.model.bo.CompanyParameterGroupBO;
import com.newtouch.bxzs.enterprise.model.bo.CooperationUserBO;
import com.newtouch.bxzs.enterprise.model.bo.EnterpriseCustomerDetailBO;
import com.newtouch.bxzs.enterprise.model.bo.PushCustomerRecordBO;
import com.newtouch.bxzs.enterprise.model.vo.CustomerCndVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 客户推送Mapper
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021/1/12 14:08</td>
 * <td>Amour</td>
 * <td>Create</td>
 * </tr>
 * </table>
 *
 * @author Amour
 * @version 1.0.0
 * @since 1.0.0
 */
@Mapper
public interface PushCustomerRecordMapper extends BaseMapper<PushCustomerRecord> {

	/**
	 * 查询客户推送列表
	 * 
	 * @param page 分页
	 * @param customerCnd 查询条件
 	 * @param userJobNumber 用户工号
	 * @param pushCustomerStatus 客户推送状态，屏蔽已处理状态
	 * @return 推送列表
	 */
	Page<PushCustomerRecordBO> getCustomerPushList(Page<PushCustomerRecordBO> page,
			@Param("customer") CustomerCndVO customerCnd, @Param("userJobNumber") String userJobNumber,
												   @Param("pushCustomerStatus")String pushCustomerStatus);

	/**
	 * 查询保单客户推送列表
	 *
	 * @param page 分页
	 * @param customerCnd 查询条件
	 * @param userJobNumber 用户工号
	 * @return 推送列表
	 */
	Page<PushCustomerRecordBO> getPolicyCustomerPushList(Page<PushCustomerRecordBO> page,
												   @Param("customer") CustomerCndVO customerCnd, @Param("userJobNumber") String userJobNumber);

	/**
	 * 根据三方关系获取对端用户信息
	 * 
	 * @param policyNumber 保单号
	 * @return 用户信息
	 */
	CooperationUserBO getgetReceiver(@Param("policyNumber") String policyNumber,@Param("userJobNumber") String userJobNumber);

	/**
	 * 获取对端合作公司参数
	 * 
	 * @return 合作公司参数
	 */
	List<CompanyParameterGroupBO> getCompanyUrl();

	/**
	 * 根据客户推送记录id获取合作公司统一社会信用代码
	 * 
	 * @param pushCustomerRecordId
	 *            客户推送记录编号
	 * @return 合作公司编号
	 */
	String getCooperationCompanyId(String pushCustomerRecordId);

	/**
	 * 推送客户决策树校验
	 * 
	 * @param customerId
	 *            客户ID
	 * @param periodStartDate
	 *            保护期开始时间
	 * @param periodEndDate
	 *            保护期结束时间
	 * @param userJobNumber
	 *            用户工号
	 * @param cooperationUserJobNumber
	 *            合作公司用户工号
	 * @param cooperationUserCertificateType
	 *            合作公司用户证件类型
	 * @param cooperationUserCertificateNumber
	 *            合作公司用户证件号
	 * @param unifiedSocialCreditCode 企业客户组织机构代码
	 * @return Integer
	 */
	Integer getPushPeriodRecord(@Param("customerId") String customerId, @Param("periodStartDate") Date periodStartDate,
			@Param("periodEndDate") Date periodEndDate, @Param("userJobNumber") String userJobNumber,
			@Param("cooperationUserJobNumber") String cooperationUserJobNumber,
			@Param("cooperationUserCertificateType") String cooperationUserCertificateType,
			@Param("cooperationUserCertificateNumber") String cooperationUserCertificateNumber,
								@Param("unifiedSocialCreditCode")String unifiedSocialCreditCode);

	/**
	 * 根据统一社会信用代码查询企业客户信息
	 * @param unifiedSocialCreditCode 统一社会信用代码
	 * @return 企业客户信息
	 */
	EnterpriseCustomerDetailBO getEnterpriseCustomerByCnd(@Param("unifiedSocialCreditCode") String unifiedSocialCreditCode,@Param("userJobNumber") String userJobNumber);


	/**
	 * 根据客户id获取接收人和推送人的机构编码
	 * @param customerId 客户id
	 * @param unifiedSocialCreditCode 企业客户组织机构代码
	 * @return 接收人和推送人的机构编码
	 */
	List<Map<String,String>>getPushOrganCode(@Param("customerId")String customerId,@Param("unifiedSocialCreditCode")String unifiedSocialCreditCode);

	/**
	 * 获取本端用户机构code
	 * @param userJobNumber 用户工号
	 * @return 用户机构code
	 */
	String getOwnOrganCode(String userJobNumber);

	/**
	 * 获取对端用户机构code
	 * @param userJobNumber 用户工号
	 * @return 用户机构code
	 */
	String getcooperationOrganCode(String userJobNumber);


}
